package com.project.collectAPI.entity.CreateUpdateClass;


import com.alibaba.druid.util.StringUtils;
import com.project.collectAPI.comm.SpiderTools;
import com.project.collectAPI.entity.MeiTuan.SystemParam;
import lombok.Data;
import org.apache.http.client.config.RequestConfig;

import java.util.HashMap;
import java.util.Map;

@Data
/*创建/更新商品类目API*/
public class CreateUpdateClass {

    private String reqAPI="https://waimaiopen.meituan.com/api/v1/retailCat/update";

    //APP方门店id，即商家中台系统里门店的编码。如商家在操作绑定门店至开放平台应用中时，未绑定三方门店id信息，则默认APP方门店id与美团门店id相同。
    //【必填】
    private String app_poi_code;


    //更新时需要用到,创建一级分类时不需要
    //原始的商品分类id：(1)与category_name_origin字段至多填一个；(2)更新分类时可使用此字段。
    private String category_code_origin;

    //原始的商品分类名称：
    //与category_code_origin至多填写一个
    // (1)与category_code_origin字段至多填一个；
    // (2)创建一级分类时，也包括同时创建二级分类的情况，此字段不传；
    // (3)更新一级分类时，此字段传原始的一级分类名称；
    // (4)在店内已有的一级分类下创建二级分类时，此字段传一级分类名称；
    // (5)更新二级分类时，此字段传原始的二级分类名称。
    private String category_name_origin;



    //商品一级分类id：
    // (1)创建一级分类时如商家有分类id信息，可传入此字段；
    // (2)更新分类时，此字段若不传，原分类id则置空。
    // (3)门店内一级、二级分类id都不允许重复。
    // 示例: A01
    private String category_code;


    //商品分类名称：
    // (1)限定长度不超过8个字符。
    // (2)创建一级分类时，此字段传一级分类名称。
    // (3)更新一级分类id时，此字段传原始的一级分类名称。
    // (4)更新一级分类名称时，此字段传新的一级分类名称。
    // (5)更新二级分类名称时，此字段传新的二级分类名称。
    // （6）不允许上传emoji等表情符。
    //示例 日用百货
    //【必填】
    private String category_name;


    //二级商品分类名称，限定长度不能超过8个字符；不允许上传emoji等表情符。 创建二级分类时，此字段传二级分类名称。
    //【必填】
    private String secondary_category_name;


    //二级商品分类id：
    // (1)创建二级分类时如商家有分类id信息，可传入此字段。
    // (2)门店内一级、二级分类id都不允许重复。
    // 示例: B01
    //【必填】
    private String secondary_category_code;

    //商品分类的排序：
    // (1)数字越小，排位越靠前；
    // (2)当前调用中如有二级分类信息，则此字段排序将作用于二级分类；
    // (3)此字段若不传，则默认为值为0。
    private int sequence;

    //是创建菜单还是更新菜单
    private Boolean isCreate=true;

    //一级分类
    private String FirstClass;

    //新的一级分类(更新传)
    private String newFirstClass;

    //二级分类
    private String SecondClass;

    //二级分类code
    private String SecondClassCode;

    //新的二级分类(更新传)
    private String newSecondClass;

    //创建二级分类
    private Boolean isCreateSecond=false;

    //1===>更新一级分类
    //2===>更新二级分类
    private int updateLevel=1;

    //统一的时间戳
    private Long timestamp;

    //签名
    private String signValue;

    /*获取美团类目接口签名*/
    public String getSign() throws Exception {
        SystemParam systemParam=new SystemParam();
        Map<String,Object> map=new HashMap<>();
        map.put("timestamp",timestamp);  //timestamp尽量统一用一次
        map.put("app_id",systemParam.getAppId());
        map.put("app_poi_code",app_poi_code); //systemParam.getApp_poi_code()
        if(isCreate){
            if(!isCreateSecond){ //一级分类
                map.put("category_name",FirstClass);
                map.put("secondary_category_name",SecondClass);
                map.put("secondary_category_code",SecondClassCode);
            }else{ //二级
                map.put("category_name_origin",FirstClass); //现有一级分类名称
                map.put("category_name",FirstClass);
                map.put("secondary_category_name",SecondClass); //新增二级分类
                map.put("secondary_category_code",SecondClassCode); //新增二级分类code
            }
        }else{
            if(updateLevel==1){
                map.put("category_name_origin",FirstClass);
                map.put("category_name",newFirstClass);
            }else{
                map.put("category_name_origin",SecondClass);
                map.put("category_name",newSecondClass);
                map.put("category_code", SecondClassCode); //新的一级分类名称/或 二级分类名称
            }
        }
        return systemParam.getSign(map,reqAPI); //获取签名
    }


    public String StartSetClass() throws Exception {

        if(!StringUtils.isEmpty(SecondClass) && SecondClass.length()>8){
            System.out.println("二级商品分类名称，限定长度不能超过8个字符....................");
            throw new Exception("二级商品分类名称，限定长度不能超过8个字符");
        }

        SystemParam systemParam=new SystemParam();
        String reqUrl=reqAPI+"?app_id="+systemParam.getAppId()+"&timestamp="+timestamp+"&sig="+signValue+"&app_poi_code="+app_poi_code;
        System.out.println("地址:"+reqUrl);


        Map<String, String> applicationParamsMap=new HashMap<>();
        applicationParamsMap.put("app_id",systemParam.getAppId());
        applicationParamsMap.put("timestamp",String.valueOf(timestamp));
        applicationParamsMap.put("sig",signValue);
        applicationParamsMap.put("app_poi_code",app_poi_code); //systemParam.getApp_poi_code()

        //Post请求 -- 创建菜单
        if(isCreate==true){
            if(!isCreateSecond) { //一级分类
                applicationParamsMap.put("category_name", FirstClass); //一级分类名称
                applicationParamsMap.put("secondary_category_name", SecondClass); //二级分类名称
                applicationParamsMap.put("secondary_category_code", SecondClassCode); //二级分类code
            }else{ //二级分类
                applicationParamsMap.put("category_name_origin", FirstClass); //一级分类名称
                applicationParamsMap.put("category_name", FirstClass); //一级分类名称
                applicationParamsMap.put("secondary_category_name", SecondClass); //新增二级分类名称
                applicationParamsMap.put("secondary_category_code", SecondClassCode); //新增二级分类code
            }
        }else{
            //Post请求 -- 更新菜单
            if(updateLevel==1){
                applicationParamsMap.put("category_name_origin", FirstClass); //原有的一级/或 二级分类名称
                applicationParamsMap.put("category_name", newFirstClass); //新的一级分类名称/或 二级分类名称
            }else{
                applicationParamsMap.put("category_name_origin", SecondClass); //原有的一级/或 二级分类名称
                applicationParamsMap.put("category_name", newSecondClass); //新的一级分类名称/或 二级分类名称
                applicationParamsMap.put("category_code", SecondClassCode); //新的一级分类名称/或 二级分类名称
            }
        }

        RequestConfig.Builder requestConfigBuilder = RequestConfig.custom();
        // ConnectTimeout:连接超时.连接建立时间，三次握手完成时间.
        requestConfigBuilder.setConnectTimeout( 30000* 1000);
        String res= SpiderTools.requestOfPost(reqAPI, applicationParamsMap,requestConfigBuilder);
        System.out.println("服务器返回结果=========>:");
        System.out.println(res);
        return res;
    }


} //class End
